From 29c570a6608712469b49aeb1e37946ddb7077c36 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sun, 4 Sep 2016 21:13:41 +0200 Subject: [PATCH] tests: Port to GdkMonitor --- tests/animated-resizing.c | 10 +-- tests/testxinerama.c | 151 +++++++++++++++++++------------------- 2 files changed, 82 insertions(+), 79 deletions(-) diff --git a/tests/animated-resizing.c b/tests/animated-resizing.c index 8660089276..2c37857ae9 100644 --- a/tests/animated-resizing.c +++ b/tests/animated-resizing.c @@ -168,7 +168,8 @@ int main(int argc, char **argv) { GError *error = NULL; - GdkScreen *screen; + GdkDisplay *display; + GdkMonitor *monitor; GdkRectangle monitor_bounds; GOptionContext *context = g_option_context_new (NULL); @@ -204,10 +205,9 @@ main(int argc, char **argv) G_CALLBACK (on_map_event), NULL); on_frame (0.); - screen = gtk_widget_get_screen (window); - gdk_screen_get_monitor_geometry (screen, - gdk_screen_get_primary_monitor (screen), - &monitor_bounds); + display = gtk_widget_get_display (window); + monitor = gdk_display_get_primary_monitor (display); + gdk_monitor_get_geometry (monitor, &monitor_bounds); gtk_window_move (GTK_WINDOW (window), monitor_bounds.x + (monitor_bounds.width - window_width) / 2, diff --git a/tests/testxinerama.c b/tests/testxinerama.c index 67a7e32e5c..538460bd12 100644 --- a/tests/testxinerama.c +++ b/tests/testxinerama.c @@ -20,107 +20,110 @@ #include #include -static gint num_monitors; -static gint primary_monitor; +static void +label_set_text_for_monitor (GtkLabel *label, + GdkMonitor *monitor) +{ + GdkRectangle monitor_geom; + gchar *str; + + gdk_monitor_get_geometry (monitor, &monitor_geom); + + str = g_strdup_printf ("" + "%s %s\n" + "Width - Height : (%d,%d)\n" + "Top left coordinate : (%d,%d)\n" + "Primary monitor: %s", + gdk_monitor_get_manufacturer (monitor), + gdk_monitor_get_model (monitor), + monitor_geom.width, monitor_geom.height, + monitor_geom.x, monitor_geom.y, + gdk_monitor_is_primary (monitor) ? "YES" : "no"); + gtk_label_set_markup (label, str); + g_free (str); +} static void request (GtkWidget *widget, gpointer user_data) { - gchar *str; - GdkScreen *screen = gtk_widget_get_screen (widget); - gint i = gdk_screen_get_monitor_at_window (screen, - gtk_widget_get_window (widget)); + GdkDisplay *display = gtk_widget_get_display (widget); + GdkMonitor *monitor = gdk_display_get_monitor_at_window (display, + gtk_widget_get_window (widget)); - if (i < 0) - str = g_strdup ("Not on a monitor "); + if (monitor == NULL) + gtk_label_set_markup (GTK_LABEL (user_data), + "Not on a monitor "); else - { - GdkRectangle monitor; - - gdk_screen_get_monitor_geometry (screen, - i, &monitor); - primary_monitor = gdk_screen_get_primary_monitor (screen); - - str = g_strdup_printf ("" - "Monitor %d of %d\n" - "Width - Height : (%d,%d)\n" - "Top left coordinate : (%d,%d)\n" - "Primary monitor: %d", - i + 1, num_monitors, - monitor.width, monitor.height, - monitor.x, monitor.y, - primary_monitor); - } + label_set_text_for_monitor (GTK_LABEL (user_data), monitor); +} - gtk_label_set_markup (GTK_LABEL (user_data), str); - g_free (str); +static void +monitor_changed_cb (GdkMonitor *monitor, + GParamSpec *pspec, + GtkWidget *label) +{ + request (label, label); } static void -monitors_changed_cb (GdkScreen *screen, - gpointer data) +monitor_added (GdkDisplay *display, + GdkMonitor *monitor, + gpointer unused) { - GtkWidget *label = (GtkWidget *)data; + GtkWidget *window, *label, *vbox, *button; + GdkRectangle monitor_geom; - request (label, label); + gdk_monitor_get_geometry (monitor, &monitor_geom); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + + gtk_window_set_default_size (GTK_WINDOW (window), 200, 200); + gtk_window_move (GTK_WINDOW (window), (monitor_geom.width - 200) / 2 + monitor_geom.x, + (monitor_geom.height - 200) / 2 + monitor_geom.y); + + label = gtk_label_new (NULL); + label_set_text_for_monitor (GTK_LABEL (label), monitor); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1); + gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); + gtk_container_add (GTK_CONTAINER (window), vbox); + gtk_container_add (GTK_CONTAINER (vbox), label); + button = gtk_button_new_with_label ("Query current monitor"); + g_signal_connect (button, "clicked", G_CALLBACK (request), label); + gtk_container_add (GTK_CONTAINER (vbox), button); + button = gtk_button_new_with_label ("Close"); + g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL); + gtk_container_add (GTK_CONTAINER (vbox), button); + gtk_widget_show_all (window); + + g_signal_connect (monitor, "notify", + G_CALLBACK (monitor_changed_cb), label); + g_signal_connect_swapped (monitor, "invalidate", + G_CALLBACK (gtk_widget_destroy), window); } int main (int argc, char *argv[]) { - GtkWidget *window, *label, *vbox, *button; - GdkScreen *screen; - gint i; + GdkDisplay *display; + gint i, num_monitors; gtk_init (&argc, &argv); - screen = gdk_screen_get_default (); + display = gdk_display_get_default (); - num_monitors = gdk_screen_get_n_monitors (screen); - if (num_monitors == 1) - g_warning ("The default screen of the current display only has one monitor."); + g_signal_connect (display, "monitor-added", G_CALLBACK (monitor_added), NULL); - primary_monitor = gdk_screen_get_primary_monitor (screen); + num_monitors = gdk_display_get_n_monitors (display); + if (num_monitors == 1) + g_warning ("The current display only has one monitor."); for (i = 0; i < num_monitors; i++) { - GdkRectangle monitor; - gchar *str; - - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - - gdk_screen_get_monitor_geometry (screen, i, &monitor); - gtk_window_set_default_size (GTK_WINDOW (window), 200, 200); - gtk_window_move (GTK_WINDOW (window), (monitor.width - 200) / 2 + monitor.x, - (monitor.height - 200) / 2 + monitor.y); + GdkMonitor *monitor; - label = gtk_label_new (NULL); - str = g_strdup_printf ("" - "Monitor %d of %d\n" - "Width - Height : (%d,%d)\n" - "Top left coordinate : (%d,%d)\n" - "Primary monitor: %d", - i + 1, num_monitors, - monitor.width, monitor.height, - monitor.x, monitor.y, - primary_monitor); - gtk_label_set_markup (GTK_LABEL (label), str); - g_free (str); - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 1); - gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); - gtk_container_add (GTK_CONTAINER (window), vbox); - gtk_container_add (GTK_CONTAINER (vbox), label); - button = gtk_button_new_with_label ("Query current monitor"); - g_signal_connect (button, "clicked", G_CALLBACK (request), label); - gtk_container_add (GTK_CONTAINER (vbox), button); - button = gtk_button_new_with_label ("Close"); - g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL); - gtk_container_add (GTK_CONTAINER (vbox), button); - gtk_widget_show_all (window); - - g_signal_connect (screen, "monitors-changed", - G_CALLBACK (monitors_changed_cb), label); + monitor = gdk_display_get_monitor (display, i); + monitor_added (display, monitor, NULL); } gtk_main (); -- 2.30.2